<?

//	***********************************
//	SbSE DB single rows fetch component
//	v1.1.2 / 2011.09.18
//	***********************************

require_once E.'_lib/_db.php';

class DB_ITEM {

	var $tables;	// FROM
	var $where;		// WHERE
	var $selection;	// SELECT

	
	var $data;			// выходная инфа по проектам из базы

	var $res;				// код ошибки	

	var $err = array (
		0 => 'success',
		1 => 'empty result',
		255 => 'not initialized'
	);
	
	function DB_ITEM() {

		$this->db = $GLOBALS['db'];
		$this->tables = '';
		$this->where = defined('USE_ADODB_OCI') ? '1=1' : 1;
		$this->selection = '*';
		$this->order = '';
		$this->group = '';

		$this->data = 0;
		
		$this->res = 255;
	}

	function init( $tables, $where = '', $selection = '', $order = '', $group='', $db = false ) {
	
		if ($db) $this->db = $db;
	
		if ($tables)
			$this->tables = str_replace(';', '', $tables);				// ! здесь надо проверять корректность куска SQL
		else
			return 0;	// error 255 - not initialized.

		if ($where)
			$this->where = str_replace(';', '', $where);		// ! здесь надо проверять корректность куска SQL

		if ($selection)
			$this->selection = str_replace(';', '', $selection);		// ! здесь надо проверять корректность куска SQL

		if ($order)
			$this->order = str_replace(';', '', $order);		// ! здесь надо проверять корректность куска SQL

		if ($group)
			$this->group = str_replace(';', '', $group);		// ! здесь надо проверять корректность куска SQL

//		$this->res = $this->fetch();
		$this->res = (defined('DBProto')) ? $this->fetch() : -1;

//debug($this->data, 'db_item: returned ', 1);

		return ! (bool) $this->res;
	}


	function fetch() {

		if (defined('USE_ADODB')) {
			$q = "SELECT {$this->selection} FROM {$this->tables} WHERE ({$this->where}) ".$this->group.$this->order;

//debug($q, 'db_item', 1);
			
			if (($res = $this->db->SelectLimit($q, 1)) && ($d = $res->FetchRow())) {
				$this->data = array();

//				foreach($d as $k => $v)	if (!is_int($k)) $this->data[strtolower($k)] = stripslashes($v); // cleanup the junky returner record
			
				foreach($d as $k => $v)	if (!is_int($k)) $this->data[strtolower($k)] = $v; // cleanup the junky returner record

			} else 
				return 1;	// no data

		} else {
	
			$q = new SQL("SELECT {$this->selection}
						  FROM {$this->tables}
						  WHERE ({$this->where})".
							($this->group ? " GROUP BY {$this->group}" : '').
							($this->order ? " ORDER BY {$this->order}" : '').
							" LIMIT 1 ");
			if ($q->run() && $q->num_rows)
				$this->data = mysql_fetch_assoc($q->res);
			else 
				return 1;										// ! нет такого проекта
				
		}
		
		return 0;		// ok
	}
	

	function error() { return $this->err[$this->res]; }

}